package com.example.JavaWeb1;

import javax.servlet.ServletConfig;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * ServletConfig类的三大作用
 *  1.可以获取获取Servlet程序的别名 servlet-name的值
 *  2.获取初始化参数init-param
 *  3.获取ServletContext对象
 *  ServletConfig对象和Servlet程序都是由Tomcat符走创建，我们负责使用。
 *  Servlet程序默认是第一次访问时创建，ServletConfig是每个Servlet陈旭创建时就创建一个对应的ServletConfig对象
 *  每个ServletConfig对象对应自己的Servlet程序，也就是说ServletConfig对象
 *  是得不到别的Servlet程序里面的初始化参数的,即每个ServletConfig对象都是独立存在的
 *  可以在很多地方使用ServletConfig对象，通过getServletConfig()也可以获得ServletConfig对象
 */
public class ServletTest implements Servlet {
    private ServletConfig servletConfig=null;
    private ServletConfig servletConfig1=null;
    public ServletTest(){
        System.out.println("1.构造器方法");

    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig=servletConfig;
        System.out.println("2.init初始化方法");
//         1.可以获取获取Servlet程序的别名 servlet-name的值
        System.out.println("程序的别名是:"+servletConfig.getServletName());
//         2.获取初始化参数init-param
        System.out.println("初始化参数username的参数是："+servletConfig.getInitParameter("username"));
        System.out.println("初始化参数的URL是："+servletConfig.getInitParameter("url"));
        // 3.获取ServletContext对象
        System.out.println(servletConfig.getServletContext());

    }
  //自己总结：可以在实现了Servlet接口中 除了类的构造器中使用servletConfig对象,因为在调用方法时，构造器方法先执行，
    //而后调用init方法,所以要在初始化servletConfig1之后，
  // 调用getServletConfig()来得到一个servletConfig的实例才可以去使用，其他方法中也是，使用getServletConfig()时必须保证
  // 有返回一个ServletConfig的实例，才可以去使用相应ServletConfig的三大方法
  // 否则报错
    @Override
    public ServletConfig getServletConfig() {
        servletConfig1 = servletConfig;
        return servletConfig1;
    }


    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        HttpServletRequest ps = (HttpServletRequest)  servletRequest;
        String method = ps.getMethod();
        System.out.println(method);
        ServletConfig servletConfig = getServletConfig();
        System.out.println(servletConfig.getInitParameter("username"));
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}
